package org.wedding.system.service;

import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
import org.wedding.system.dto.menu.MenuTreeDto;
import org.wedding.system.dto.user.UserQuery;
import org.wedding.utils.CommonResult;
import org.wedding.center.dto.AuthUserDto;
import org.wedding.system.entity.UserInfo;
import org.wedding.center.entity.ApprovalInfo;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * UserService
 *
 * @author yh_liu
 * @version v1.0
 * @since 2022/11/13
 */
public interface IUserService extends IService<UserInfo> {
    /**
     * 查询当前用户菜单
     *
     * @param userId 用户id
     * @return 菜单权限合集
     */
    List<MenuTreeDto> getUserMenu(String userId);

    /**
     * 查询当前用户
     *
     * @param userName 用户账号
     * @return 用户信息
     */
    UserInfo getInfoByUserName(String userName);

    /**
     * 查询当前用户菜单
     *
     * @param userId 用户id
     * @return 菜单权限合集
     */
    List<String> getUserMenuAuth(String userId);

    /**
     * 查询当前用户角色
     *
     * @param userId 用户id
     * @return 角色编号合集
     */
    List<String> getUserRole(String userId);

    CommonResult delUser(String userId);

    void insertUserTenant(String id, String tenant, String user);

    void insertRoleUser(String id, String role, String user);

    List<UserInfo> listAll(UserQuery query);

    CommonResult updateUser(UserInfo userDto);

    CommonResult<UserInfo> login(AuthUserDto authUserDto, HttpServletRequest request);

    CommonResult<UserInfo> register(UserInfo userInfo);

    CommonResult<UserInfo> getUserInfo(HttpServletRequest request);

    CommonResult<UserInfo> logout(HttpServletRequest request);

    /**
     * 获取默认密码
     * @param user
     */
    void getDefaultPassword(UserInfo user);
    /**
     * 分页查询
     *
     * @param userQuery   筛选条件
     * @return CommonResult 统一返回类
     */
    CommonResult<List<UserInfo>> findAll(UserQuery userQuery);

    /**
     * 新增对象数据
     *
     * @param userInfo 筛选条件
     * @return CommonResult 统一返回类
     */
    CommonResult add(UserInfo userInfo);

    /**
     * 通过主键查询数据
     *
     * @param id 主键
     * @return CommonResult 统一返回类
     */
    CommonResult<UserInfo> view(String id);

    /**
     * 通过主键更新数据
     *
     * @param userInfo 筛选条件
     * @return CommonResult 统一返回类
     */
    CommonResult updateEntity(UserInfo userInfo);

    /**
     * 通过主键删除数据
     *
     * @param ids 主键
     * @return CommonResult 统一返回类
     */
    CommonResult delete(List<String> ids);

    /**
     * 更新用户审批状态
     */
    CommonResult updateUserApproval(ApprovalInfo approvalInfo);

    /**
     * 生成邀新二维码
     * @param url
     * @return
     */
    CommonResult getQRCode();

    public CommonResult updateEntityMoney(UserInfo userInfo);
}
